TypeScript 干预:使用 Byzantium 打破运行时检查成瘾
时间 :
2024-10-27,09:03:22
编辑 ::ADMIN
听着,我们需要谈谈你的类型检查瘾。是的,就是您——在您的身份验证中间件中进行了 47 个instanceof 检查。编写的测试用例多于实际代码的开发人员。将 typescript 视为只是花哨的 jsdoc 注释的人。
干预
让我给你画一幅图画:现在是中午,你正在喝第四杯咖啡,并且正在调试一个生产问题。日志显示用户以某种方式通过了十五层运行时验证。你的单元测试比 twitter 的活跃用户还要多,但不知何故,不知何故,有人设法在应该是字符串的地方发送了一个数字。
“但那是不可能的!”你哭了,滚动浏览测试覆盖率报告,显示原始的 100%。 “我检查过这个!”
你有吗?你真的吗?或者您是否只是将同一张支票写了三遍:
- 进入 typescript 界面
- 再次在您的验证中间件中
- 再次在单元测试中
停止测试 typescript 已经知道的内容
这是一个革命性的想法:如果我们......信任编译器会怎样?我知道,疯狂的概念。但请听我说完。
interface validrabbit { username: string; password: string; } interface invalidrabbit { username: number; password: string; } type validaterabbit<rabbit> = assert< //assert that rabbit is of type {username, password} is.type< user, { username: string; password: string; } >, //custom compile time exceptions "trix are for kids. provide a username and password.", user >; // ha! silly rabbit... function checkrabbit<t>(rabbit: validaterabbit<t>) { // .... protect your trix } declare const rabbit1: validrabbit; declare const rabbit2: invalidrabbit; checkrabbit(rabbit1); checkrabbit(rabbit2); /** ~~~~~~~~~ * └───── type exception! "...provide a username and password" */